package com.example.boot03.Controller;

import com.example.boot03.rntity.Product;
import com.example.boot03.util.DBUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.sql.*;
import java.util.ArrayList;

/**
 * @Name: ProductController
 * @Author: 西风残叶
 * @Company: 朝兮网络工作室
 * @Data: 2023/11/10 16:46
 */
// @Controller
@RestController // 使用次注解相当于每一个处理强求上都添加了@ResponseBody注解
public class ProductController {
    /**
     * 增加商品
     * @param product:获取实体类中的属性值
     * @return :返回插入结果
     */
    @RequestMapping("/insert")
    // @ResponseBody
    public String insert(Product product) {
        System.out.println("product = " + product);
        // 输出数据
        try (Connection conn = DBUtil.getConnection()) {
            // 准备操作的数据
            String sql = "insert into product value(null,?,?,?)";
            // 创建执行sql语句的对象
            PreparedStatement ps = conn.prepareStatement(sql);
            // 替换sql中的?
            ps.setString(1, product.getTitle());
            // 这里的set方法类型要和实体类中属性的类型一致
            ps.setDouble(2, product.getPrice());
            ps.setInt(3, product.getNum());
            // 执行sql语句
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return "添加成功!<a href='/'>返回首页</a>";
    }

    /**
     * 查询商品
     * @return :返回一个表格
     */
    @RequestMapping("/select")
    @ResponseBody // 通过返回值的方式 给服务器发送响应
    public String select() {
        // 创建一个集合,用于封装商品对象
        ArrayList<Product> list = new ArrayList<>();
        try (Connection conn = DBUtil.getConnection()) {
            // 存储数据库中的数据
            String sql = "select id ,title,price,num from product";
            // 创建执行sql的对象
            PreparedStatement ps = conn.prepareStatement(sql);
            // 执行查询
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                int id = rs.getInt(1);
                String title = rs.getString(2);
                double price = rs.getDouble(3);
                int num = rs.getInt(4);
                // 把查到的数据存到Product对象中
                Product p = new Product();
                p.setId(id);
                p.setTitle(title);
                p.setPrice(price);
                p.setNum(num);
                list.add(p);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        // 把list集合中的内容装进到一个table中
        String html = "<center><table border='1'>";
        html += "<tr><th>id</th><th>标题</th><th>价格</th><th>库存</th><th>操作</th></tr>";
        // 遍历商品集合
        for (Product p : list) {
            html += "<tr>";
            html += "<td>" + p.getId() + "</td>";
            html += "<td>" + p.getTitle() + "</td>";
            html += "<td>" + p.getPrice() + "</td>";
            html += "<td>" + p.getNum() + "</td>";
            //             /delete?id=5
            html += "<td><a href='/delete?id=" + p.getId() + "'>删除</a></td>";
            html += "</tr>";
        }
        html += "</table></center>";
        // 此时html里面是表格标签+数据
        return html;  // setContentType("text/html;charset
        // 将list集合转为字符串响应给客户端
        // return list.toString();

    }

    /**
     * 删除商品
     *
     * @param id :需要删除的商品编号
     * @return :跳转删除成功的页面
     */
    @RequestMapping("/delete")
    // @ResponseBody
    public String delete(int id) {
        System.out.println("id= " + id);
        // 获取数据库链接
        try (Connection conn = DBUtil.getConnection()) {
            // 删除数据库数据的sql语句
            String sql = "delete from product where id=?";
            // 创建SQL执行对象
            PreparedStatement ps = conn.prepareStatement(sql);
            // 替换sql中的?
            ps.setInt(1, id);
            // 执行sql语句
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return "删除完成!<a href='/select'>返回列表页面</a>";
    }

    /**
     * 修改商品
     * @param product :获取修改的商品内容
     * @return :返回修改结果
     */
    @RequestMapping("/updata")
    // @ResponseBody
    public String updata(Product product) {
        System.out.println("product " + product);
        // 获取数据库链接
        try (Connection conn = DBUtil.getConnection()){
            // 修改数据库的sql语句
            String sql = "update product set title=?, price=?, num=? where id=?";
            // 创建执行sql语句的对象
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1,product.getTitle());
            ps.setDouble(2,product.getPrice());
            ps.setInt(3,product.getNum());
            ps.setInt(4,product.getId());
            // 执行sql语句
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return "修改成功!<a href='/select'>返回列表</a>";
    }
}